#ifndef __MY_AUTH__
#define __MY_AUTH__
#include "User.h"
#include "httplib.h"
#include <string>

namespace aod {
    class Auth {
        public:
            Auth(TableUserSession* session_table) : _session_table(session_table) {}
            
            // 从请求头中提取会话ID
            std::string ExtractSessionId(const httplib::Request& req);
            
            // 验证会话并获取用户信息
            bool ValidateSession(const httplib::Request& req, Json::Value* user_info);
            
            // 检查用户是否有管理员权限
            bool IsAdmin(const Json::Value& user_info);
            
            // 设置认证响应头
            void SetAuthHeaders(httplib::Response& res, const std::string& session_id);
            
            // 设置未授权响应
            void SetUnauthorizedResponse(httplib::Response& res);
            
            // 设置禁止访问响应
            void SetForbiddenResponse(httplib::Response& res);
            
        private:
            TableUserSession* _session_table;
    };
    
    // 中间件函数：要求用户登录
    bool RequireAuth(const httplib::Request& req, httplib::Response& res, Auth& auth, Json::Value* user_info);
    
    // 中间件函数：要求管理员权限
    bool RequireAdmin(const httplib::Request& req, httplib::Response& res, Auth& auth, Json::Value* user_info);
}

#endif 